package com.zzjson.validation;

import com.zzjson.validation.constraints.ValidCardNumber;
import org.springframework.util.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Objects;

/**
 * <p>****************************************************************************</p>
 * <p><b>Copyright © 2010-2019 shuncom team All Rights Reserved<b></p>
 * <ul style="margin:15px;">
 * <li>Description : com.zzjson.validation</li>
 * <li>Version     : 1.0.0</li>
 * <li>Creation    : 2019年11月07日</li>
 * <li>@author     : zzy0_0</li>
 * </ul>
 * <p>****************************************************************************</p>
 */
public class ValidCardNumberConstraintValidator implements ConstraintValidator<ValidCardNumber, String> {

	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		String[] parts = StringUtils.delimitedListToStringArray(value, "-");

		//为什么不用String#split方法，原因是该方法使用了正则表达式
		//其次是空指针表达不够
		//如果在依赖中，没有StringUtils.delimitedListToStringArray Api的话，可以使用StringTokenizer
		//或者用 Apache commons-lang StringUtils
		context.disableDefaultConstraintViolation();

		if (parts.length != 2) {
			return false;
		}
		String prefix = parts[0];
		String suffix = parts[1];
		boolean isValidPrefix = Objects.equals(prefix, "zzjson");
		boolean isValidInteger = org.apache.commons.lang3.StringUtils.isNumeric(suffix);
		return isValidInteger && isValidPrefix;
	}

	@Override
	public void initialize(ValidCardNumber constraintAnnotation) {

	}
}